package com.exam.api.modules.system.dto;

import cn.hutool.core.bean.BeanUtil;
import com.exam.api.modules.system.domain.TblUser;
import com.exam.api.common.dto.ConverterDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;

import java.time.LocalDate;
import java.util.List;

/**
 * 用户新增DTO
 *
 * @author bcheng
 */
@Data
public class UserAddDTO implements ConverterDTO<TblUser> {

    /**
     * 部门id
     */
    @Schema(description="部门id")
    @NotNull(message = "部门id不能为null")
    private Long deptId;


    /**
     * 工号
     */
    @Schema(description = "工号")
    @Size(max = 50, message = "工号最大长度要小于 50")
    private String jobNo;

    /**
     * 昵称
     */
    @Schema(description = "昵称")
    @Size(max = 15, message = "昵称最大长度要小于 15")
    private String nickName;

    /**
     * 真实名字
     */
    @Schema(description = "真实名字")
    @Size(max = 15, message = "真实名字最大长度要小于 15")
    private String realName;

    /**
     * 头像
     */
    @Schema(description = "头像")
    @Size(max = 255, message = "头像最大长度要小于 255")
    private String avatarUrl;

    /**
     * 我的二维码
     */
    @Schema(description = "我的二维码")
    @Size(max = 150, message = "我的二维码最大长度要小于 150")
    private String qrcode;

    /**
     * 性别  0 男 1 女 2 其他
     */
    @Schema(description = "性别  0 男 1 女 2 其他")
    @Size(max = 10, message = "性别  0 男 1 女 2 其他最大长度要小于 10")
    private String gender;

    /**
     * 性别是否显示 0显示 1隐藏
     */
    @Schema(description = "性别是否显示 0显示 1隐藏")
    @NotNull(message = "性别是否显示 0显示 1隐藏不能为null")
    private Boolean genderShow;

    /**
     * 生日
     */
    @Schema(description = "生日")
    private LocalDate birthday;

    /**
     * 个性签名
     */
    @Schema(description = "个性签名")
    @Size(max = 50, message = "个性签名最大长度要小于 50")
    private String signature;

    /**
     * 地区
     */
    @Schema(description = "地区")
    @Size(max = 50, message = "地区最大长度要小于 50")
    private String region;

    /**
     * 地区是否显示 0显示 1隐藏
     */
    @Schema(description = "地区是否显示 0显示 1隐藏")
    @NotNull(message = "地区是否显示 0显示 1隐藏不能为null")
    private Boolean regionShow;

    /**
     * 区号
     */
    @Schema(description = "区号")
    @Size(max = 6, message = "区号最大长度要小于 6")
    @NotBlank(message = "区号不能为空")
    private String zoneCode;

    /**
     * 邮箱
     */
    @Schema(description="邮箱")
    @Size(max = 50,message = "邮箱最大长度要小于 50")
    private String email;

    /**
     * 手机号
     */
    @Schema(description = "手机号")
    @Size(max = 20, message = "手机号最大长度要小于 20")
    @NotBlank(message = "手机号不能为空")
    private String tel;

    /**
     * 密码
     */
    @Schema(description = "密码")
    @Size(max = 100, message = "密码最大长度要小于 100")
    private String password;

    /**
     * 用户权重
     */
    @Schema(description = "用户权重")
    @NotNull(message = "用户权重不能为null")
    private Long weight;

    /**
     * 状态 0 正常 1 停用 2 删除
     */
    @Schema(description = "状态 0 正常 1 停用 2 删除")
    private Integer status;

    /**
     * 备注
     */
    @Schema(description = "备注")
    @Size(max = 50, message = "备注最大长度要小于 50")
    private String comment;

    /**
     * 禁用备注
     */
    @Schema(description = "禁用备注")
    @Size(max = 50, message = "禁用备注最大长度要小于 50")
    private String forbiddenComment;

    /**
     * 角色id
     */
    @Schema(description = "角色id")
    private List<Long> roleIds;

    @Override
    public TblUser converter() {
        TblUser tblUser = new TblUser();
        BeanUtil.copyProperties(this, tblUser);
        return tblUser;
    }
}
